﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;

namespace MwanaDOC
{
    public partial class ctrlBuscaDetalhada : UserControl
    {
        Documento doc = new Documento();
        LogToFile lg = new LogToFile();

        public ctrlBuscaDetalhada()
        {
            InitializeComponent();
        }

        private static ctrlBuscaDetalhada _instance;
        public static ctrlBuscaDetalhada getInstance()
        {
            if (_instance == null)
            {
                _instance = new ctrlBuscaDetalhada();
            }
            return _instance;
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            dataBindBuscaDetalhada();
        }

        private void dataBindBuscaDetalhada()
        {
            BindingSource bsResultados = new BindingSource();

            if (!txtExpressao.Text.Equals(""))
            {
                if (rbtnTitulo.Checked)
                {
                    bsResultados = doc.getDetalhada(Global.opcaoBusca.Titulo, txtExpressao.Text);
                }
                else if (rbtnProfessor.Checked)
                {
                    bsResultados = doc.getDetalhada(Global.opcaoBusca.Professor, txtExpressao.Text);
                }
                else if (rbtnPalavra.Checked)
                {
                    bsResultados = doc.getDetalhada(Global.opcaoBusca.Palavra, txtExpressao.Text);
                }
                else if (rbtnPeriodo.Checked)
                {

                    bsResultados = doc.getDetalhada(Global.opcaoBusca.Periodo, txtExpressao.Text);
                }
            }
            else
            {
                MessageBox.Show("Digite a expressão para busca");
            }

            dgvResultados.DataSource = bsResultados;
            dgvResultados.Refresh();

            if (bsResultados.Count <= 0)
            {
                gbxResultado.Text = "Nenhum arquivo encontrado";
            }
            else if (bsResultados.Count == 1)
            {
                gbxResultado.Text = "Resultado";
            }
            else
            {
                gbxResultado.Text = "Resultados";
            }
        }

        private void txtExpressao_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (rbtnPeriodo.Checked)
            {
                if ((!Char.IsDigit(e.KeyChar)) & ((e.KeyChar != (char)Keys.Back)))
                {
                    e.Handled = true;
                }
                else
                {
                    e.Handled = false;
                }
            }
        }

        private void rbtnPeriodo_CheckedChanged(object sender, EventArgs e)
        {
            if ( rbtnPeriodo.Checked)
                txtExpressao.Text = "";
        }

        private void dgvResultados_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            int indice = e.RowIndex;
            AbrirDocumento(indice);
        }

        private void AbrirDocumento(int indice)
        {
            // Documento doc1 = new Documento();
            string endereco;
            //Prevenindo o ArgumentAutOfBound Exception
            try
            {
                string _titulo = dgvResultados.Rows[indice].Cells[1].Value.ToString();
                endereco = doc.getDocPath(_titulo);
                Process.Start(endereco);
            }
            catch (ArgumentOutOfRangeException e)
            {
                lg.log(this.GetType().Name, "BuscaDetalhada.AbrirDocumento", e.Message, e.StackTrace);
            }
            catch (FileNotFoundException e)
            {
                MessageBox.Show("Arquivo não encontrado");
                lg.log(this.GetType().Name, "BuscaDetalhada.AbrirDocumento", e.Message, e.StackTrace);
            }
            catch (Exception E)
            {
                MessageBox.Show("Impossível completar operação\nDetalhes do Erro: " + E.Message, "Erro inesperado!");
                lg.log(this.GetType().Name, "BuscaDetalhada.AbrirDocumento", E.Message, E.StackTrace);
            }
            //MessageBox.Show(_titulo);
        }

        private void dgvResultados_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            btnAbrir.Enabled = true;
            btnEditar.Enabled = true;
            btnApagar.Enabled = true;
        }

        private void btnAbrir_Click(object sender, EventArgs e)
        {
            try
            {
                int indice = dgvResultados.CurrentRow.Index;
                AbrirDocumento(indice);
            }
            catch (Exception error)
            {
                lg.log(this.GetType().Name, "BuscaDetalhada.btnArir_Click", error.Message, error.StackTrace);

            }
        }

        private void btnApagar_Click(object sender, EventArgs e)
        {
            try
            {
                int indice = dgvResultados.CurrentRow.Index;
                //string _titulo = dgvResultados.Rows[indice].Cells[1].Value.ToString();
                string cod = dgvResultados.Rows[indice].Cells[0].Value.ToString();
                int _cod = int.Parse(cod);

                //string endereco = doc.getDocPath(_titulo);

                if (doc.ApagarDoc(_cod))
                {
                    MessageBox.Show("Documento apagado com sucesso");
                    dgvResultados.Rows.Remove(dgvResultados.CurrentRow);
                    dgvResultados.Refresh();
                }
                else
                    MessageBox.Show("Impossível apagar o documento");
            }
            catch (Exception erro1)
            {
                lg.log(this.GetType().Name, "BuscaDetalhada.btnApagarClick", erro1.Message, erro1.StackTrace);
                
            }

        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            Documento documento = new Documento();
            BuscaEdita bEditaDoc = new BuscaEdita();
            try
            {
                int indice = dgvResultados.CurrentRow.Index;
                string cod = dgvResultados.Rows[indice].Cells[0].Value.ToString();
                int _cod = int.Parse(cod);
                documento = bEditaDoc.buscaEditaDocumento(_cod);

                cadDoc caddoc = cadDoc.getFrmFilho(Global.Modo.Atualizar, documento);

                painelPrincipal.Controls.Clear();
                painelPrincipal.Controls.Add(caddoc);

                caddoc.Dock = DockStyle.Fill;
                caddoc.Visible = true;
            }
            catch (Exception ex)
            {
                //não faça nada
                lg.log(this.GetType().Name, "BuscaDetalhada.btnEditar_click", ex.Message, ex.StackTrace);
            }

        }
    }
}
